package rhplus.servico;

import java.sql.Date;
import java.sql.SQLException;
import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import rhplus.acessoBD.PMF;

public class Comparticipacao {


        // Atributos
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private long id_comparticipacao;
    @Persistent
    private long id_servico;
    @Persistent
    private long id_empresa;
    @Persistent
    private double percentagem;
    @Persistent
    private Date data;

    /** Creates a new instance of Comparticipacao */
    public Comparticipacao(final long id_servico, final long id_empresa, final double percentagem, final Date data) {

        this.id_empresa = id_empresa;
        this.id_servico = id_servico;
        this.percentagem = percentagem;
        this.data = data;
    }

    public static void insere(Comparticipacao dados_da_comparticipacao) throws SQLException, ClassNotFoundException,
            InstantiationException, IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.makePersistent(dados_da_comparticipacao);
        } finally {
            pm.close();
        }
    }

    public static void altera(Comparticipacao dados_da_comparticipacao) throws SQLException, ClassNotFoundException,
            InstantiationException, IllegalAccessException {
        
         PersistenceManager pm = PMF.get().getPersistenceManager();

         long new_id_empresa = dados_da_comparticipacao.getIdEmpresa();
         long new_id_servico = dados_da_comparticipacao.getIdServico();
         double new_percentagem = dados_da_comparticipacao.getPercentagem();
         Date new_data = dados_da_comparticipacao.getData();

		try {
			pm.currentTransaction().begin();

			dados_da_comparticipacao = pm.getObjectById(Comparticipacao.class, dados_da_comparticipacao.getIdComparticipacao());
			dados_da_comparticipacao.setIdEmpresa(new_id_empresa);
                        dados_da_comparticipacao.setIdServico(new_id_servico);
                        dados_da_comparticipacao.setPercentagem(new_percentagem);
                        dados_da_comparticipacao.setData(new_data);
			
                        pm.makePersistent(dados_da_comparticipacao);
			pm.currentTransaction().commit();

		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}

    }

    public static Comparticipacao devolve(final int id_servico, final int id_empresa) throws SQLException, ClassNotFoundException,
            InstantiationException, IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();


        String query = "select from "+ Comparticipacao.class.getName()+
                "where id_empresa == "+id_empresa+" && id_servico == "+id_servico;

        Comparticipacao comparticipacao = (Comparticipacao) pm.newQuery(query).execute();

        return comparticipacao;
    }

    public static boolean existe(final int id_servico, final int id_empresa) throws SQLException, ClassNotFoundException, InstantiationException,
            IllegalAccessException {

        return Comparticipacao.devolve(id_servico, id_empresa) != null;
    }

    public static void remove(final int id_servico, final int id_empresa) throws SQLException, ClassNotFoundException, InstantiationException,
            IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from "+ Comparticipacao.class.getName()+
                "where id_empresa == "+id_empresa+" && id_servico == "+id_servico;

        Comparticipacao comparticipacao = (Comparticipacao) pm.newQuery(query).execute();

        try {
		pm.currentTransaction().begin();

		pm.deletePersistent(comparticipacao);

		pm.currentTransaction().commit();
	} catch (Exception ex) {
		pm.currentTransaction().rollback();
		throw new RuntimeException(ex);
	} finally {
		pm.close();
	}

    }

    public Long getIdServico() {
        return id_servico;
    }

    public Long getIdEmpresa() {
        return id_empresa;
    }

    public Date getData() {
        return data;
    }
    public Long getIdComparticipacao() {
        return id_comparticipacao;
    }

    public double getPercentagem() {
        return percentagem;
    }

    public void setIdEmpresa(final long idEmpresa){
        this.id_empresa=idEmpresa;
    }

    public void setIdServico(final long idServico){
        this.id_servico=idServico;
    }

    public void setData(final Date data){
        this.data=data;
    }


    public void setPercentagem(final double percentagem) {
        this.percentagem = percentagem;
    }

}
